/* 
Scenic Graphics Library
Copyright (C) 2007 Jouni Tulkki

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USApackage scenic;
*/

package scenic.toolkit;

import scenic.SceneContainer;
import scenic.SceneNode;
import scenic.ScenicGraphics;
import scenic.toolkit.db.SyncVector;

public class ParagraphView implements View {
	private ParagraphModel model;
	private TextView text;
	private double top;
	private SceneContainer scene = new SceneContainer();
	
	private ElementVector elements;
	
	@SuppressWarnings("serial")
	private class ElementVector extends SyncVector<ElementView> {
		public ElementVector() {
			super(model.getElements());
		}
		
		@Override
		public ElementView createObject(int index, Object sourceNode) {
			ElementView e = ((ElementModel)sourceNode).createElement();
			
			text.invalidate();
			return e;
		}

		@Override
		public void removeObject(int index, Object object) {
			text.invalidate();
		}		
	}
	
	public ParagraphView(ParagraphModel model, TextView text) {
		this.model = model;
		this.text = text;
		elements = new ElementVector();
//		elementSync = new ElementSynchronizer();
	}
	
	public ParagraphModel getModel() {
		return model;
	}

	public double getTop() {
		return top;
	}
	
	public void setTop(double top) {
		this.top = top;
	}
	
	public SceneNode getScene() {
		return scene;
	}
	
	void paint(TextSetter textSetter) {
		ScenicGraphics g = new ScenicGraphics(scene);
		
		for(int i = 0; i < elements.size(); i++)
			elements.elementAt(i).paint(g, textSetter);
		textSetter.endLine();
	}
}
